Add a blendmode node reftest
authorMatthias Clasen <mclasen@redhat.com>
Sun, 8 Oct 2017 18:29:27 +0000 (14:29 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 8 Oct 2017 18:29:27 +0000 (14:29 -0400)
The Vulkan renderer doesn't pass this, currently.

testsuite/gsk/blendmode.node [new file with mode: 0644]
testsuite/gsk/blendmode.png [new file with mode: 0644]
testsuite/gsk/test-render-nodes.c

diff --git a/testsuite/gsk/blendmode.node b/testsuite/gsk/blendmode.node
new file mode 100644 (file)
index 0000000..c6a9e85
Binary files /dev/null and b/testsuite/gsk/blendmode.node differ
diff --git a/testsuite/gsk/blendmode.png b/testsuite/gsk/blendmode.png
new file mode 100644 (file)
index 0000000..36a8203
Binary files /dev/null and b/testsuite/gsk/blendmode.png differ
index f39f725540866ec1740c85b5711ceae31bbd9801..f3d65f49999df63b8b2f2546be67405ec67c45dc 100644 (file)
@@ -154,6 +154,34 @@ cairo (void)
   return node;
 }
 
+static GskRenderNode *
+cairo2 (void)
+{
+  GskRenderNode *node;
+  cairo_surface_t *surface;
+  cairo_t *cr;
+  int i, j;
+
+  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 200, 200);
+  cr = cairo_create (surface);
+
+  cairo_set_source_rgb (cr, 1, 1, 1);
+
+  for (i = 0; i < 10; i++)
+    for (j = 0; j < 10; j++)
+      {
+        cairo_rectangle (cr, i*20, j*20, 10, 10);
+        cairo_fill (cr);
+      }
+
+  node = gsk_cairo_node_new_for_surface (&GRAPHENE_RECT_INIT (0, 0, 200, 200), surface);
+
+  cairo_destroy (cr);
+  cairo_surface_destroy (surface);
+
+  return node;
+}
+
 static GskRenderNode *
 repeat (void)
 {
@@ -205,6 +233,31 @@ repeat (void)
   return container;
 }
 
+static GskRenderNode *
+blendmode (void)
+{
+  GskRenderNode *child1;
+  GskRenderNode *child2;
+  GskRenderNode *transform;
+  GskRenderNode *container;
+  graphene_matrix_t matrix;
+
+  child1 = cairo ();
+  child2 = cairo2 ();
+
+  graphene_matrix_init_translate (&matrix, &(const graphene_point3d_t) { 50, 50, 0 });
+  transform = gsk_transform_node_new (child2, &matrix);
+  gsk_render_node_unref (child2);
+  child2 = transform;
+
+  container = gsk_blend_node_new (child1, child2, GSK_BLEND_MODE_HUE);
+
+  gsk_render_node_unref (child1);
+  gsk_render_node_unref (child2);
+
+  return container;
+}
+
 static const struct {
   const char *name;
   GskRenderNode * (* func) (void);
@@ -212,6 +265,7 @@ static const struct {
   { "colors.node", colors },
   { "cairo.node", cairo },
   { "repeat.node", repeat },
+  { "blendmode.node", blendmode },
 };
 
 /*** test setup ***/